iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
自我挑戰組

我與熊貓Pandas相處的日子系列 第 3

Day3- 建立DataFrame(1)二維的創建及取值

  • 分享至 

  • xImage
  •  

Pandas的DataFrame是二維陣列,是使用橫向索引(列)與直向欄位(行)組合起來的資料內容。

創建DataFrame語法為:

pd.DataFrame(資料,index=索引,columns=欄位)

資料可用串列(list)、元組(tuple)、字典(dictionary)、Numpy陣列,或組合Series物件成為資料來源。index(索引)為橫向的列,columns(欄位)為直向的欄位名稱,預設為0開始之整數串列。

建立一個水果行之4位客人,分別為5種水果打下分數的DataFrame,若使用二維串列當作資料來源:

import pandas as pd
pd.DataFrame([[8,7,6,5,4],[3,4,2,9,5],[4,6,7,2,8],[2,7,6,3,9]])

執行結果:
	0	1	2	3	4
0	8	7	6	5	4
1	3	4	2	9	5
2	4	6	7	2	8
3	2	7	6	3	9

加入客戶名稱為index,各種水果被打下的分數為columns:

import pandas as pd
pd.DataFrame([[8,7,6,5,4],[3,4,2,9,5],[4,6,7,2,8],[2,7,6,3,9]],index=['小明','小美','小英','小玉'],columns=['蘋果','芭樂','香蕉','橘子','檸檬'])

執行結果:
蘋果	芭樂	香蕉	橘子	檸檬
小明	8	7	6	5	4
小美	3	4	2	9	5
小英	4	6	7	2	8
小玉	2	7	6	3	9

一、利用串列及字典建立DataFrame

(1)以字典建立DataFrame

import pandas as pd
fruit={'蘋果':{'小明':8,'小美':3,'小英':4,'小玉':2},'芭樂':{'小明':7,'小美':4,'小英':6,'小玉':7},'香蕉':{'小明':6,'小美':2,'小英':7,'小玉':6},'橘子':{'小明':5,'小美':9,'小英':2,'小玉':3},'檸檬':{'小明':4,'小美':5,'小英':8,'小玉':9},}
df=pd.DataFrame(fruit)
print(df)

執行結果:
  蘋果  芭樂  香蕉  橘子  檸檬
小明   8   7   6   5   4
小美   3   4   2   9   5
小英   4   6   7   2   8
小玉   2   7   6   3   9

(2)以串列建立DataFrame

import pandas as pd
se1=pd.Series({'小明':8,'小美':3,'小英':4,'小玉':2})
se2=pd.Series({'小明':7,'小美':4,'小英':6,'小玉':7})
se3=pd.Series({'小明':6,'小美':2,'小英':7,'小玉':6})
se4=pd.Series({'小明':5,'小美':9,'小英':2,'小玉':3})
se5=pd.Series({'小明':4,'小美':5,'小英':8,'小玉':9})
df=pd.DataFrame({'蘋果':se1,'芭樂':se2,'香蕉':se3,'橘子':se4,'檸檬':se5})
print(df)

執行結果:
  蘋果  芭樂  香蕉  橘子  檸檬
小明   8   7   6   5   4
小美   3   4   2   9   5
小英   4   6   7   2   8
小玉   2   7   6   3   9

二、DataFrame取值

(1)以欄位名稱取值

df[欄位名稱]
df['橘子']

執行結果:
小明    5
小美    9
小英    2
小玉    3
Name: 橘子, dtype: int64

也可以使用邏輯運算來取得資料:

df[df['芭樂']>=6]

執行結果:
	蘋果	芭樂	香蕉	橘子	檸檬
小明	8	7	6	5	4
小英	4	6	7	2	8
小玉	2	7	6	3	9

(2)以values屬性取值

DataFrame的values屬性可取得全部資料,返回二維串列

df.values  

執行結果:
array([[8, 7, 6, 5, 4],
       [3, 4, 2, 9, 5],
       [4, 6, 7, 2, 8],
       [2, 7, 6, 3, 9]])

取得第三位客戶的分數

df.values[2]

執行結果:
array([4, 6, 7, 2, 8])

取得第四位客人第五種水果的分數

df.values[3][4]

執行結果:
9

(3)以索引及欄位名稱取值

loc可直接以索引及欄位名稱取值

df.loc[索引名稱,欄位名稱]
df.loc['小明','香蕉']

執行結果:
6
df.loc['小明':'小英','香蕉':'檸檬']

執行結果:
	香蕉	橘子	檸檬
小明	6	5	4
小美	2	9	5
小英	7	2	8
df.loc['小明':,:'香蕉']

執行結果:
	蘋果	芭樂	香蕉
小明	8	7	6
小美	3	4	2
小英	4	6	7
小玉	2	7	6

(4)以索引及欄位編號取值

iloc可直接以索引及欄位編號取值

df.iloc[索引編號,欄位編號]
df.iloc[2,3]

執行結果:
2
df.iloc[1:3,3:5]

執行結果:
	橘子	檸檬
小美	9	5
小英	2	8
df.iloc[:3,2:]

執行結果:
	香蕉	橘子	檸檬
小明	6	5	4
小美	2	9	5
小英	7	2	8

(5)取得最前或最後數列資料

取得最前面n列資料

df.head(n) 
df.head(2)

執行結果:
	蘋果	芭樂	香蕉	橘子	檸檬
小明	8	7	6	5	4
小美	3	4	2	9	5

取得最後面n列資料

df.tail(n) 
df.tail(2)

執行結果:
	蘋果	芭樂	香蕉	橘子	檸檬
小英	4	6	7	2	8
小玉	2	7	6	3	9

完成二維的創建及取值了~明天我們來介紹簡單的資料操作囉~!!/images/emoticon/emoticon01.gif


上一篇
Day2- Pandas 基本介紹&一維的創建及取值
下一篇
Day4- 建立DataFrame(2)資料操作
系列文
我與熊貓Pandas相處的日子30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言